// 导入网络请求模块
import axios from 'axios'


// 请求书写方式1
/*export function request(config, success, failure ) {
    // 1.创建axios的实例
    const instance = axios.create({
        baseURL : 'http://123.207.32.32:8000',
        timeout : 5000
    });
    // 2.发送真正的网络请求
    instance( config )
    .then( res =>{
        //console.log( res );
        success( res );
    })
    .catch( err=>{
        //console.log( err );
        failure( err );
    })
}*/

//请求方式 书写2
/*export function request( config ){
    const instance = axios.create({
        baseURL : 'http://123.207.32.32:8000',
        timeout : 5000
    });
    instance( config.baseConfig )
    .then( res=>{
        config.success(res);
    })
    .catch( err=>{
        config.fail( err );
    })
}*/

// 请求方式 3 
/*export function request( config ){
    return new Promise( (resolve, reject )=>{
        // 创建实例
        const instance = axios.create({
            baseURL : 'http://123.207.32.32:8000',
            timeout : 5000
        });
        instance( config )
        .then( res =>{
            resolve(res);
        })
        .catch( err=>{
            reject( err );
        })
    })
}*/

//请求方式 4 我们常写的方式
export function request( config ){
        // 创建实例
        const instance = axios.create({
            baseURL : 'http://123.207.32.32:8000',
            timeout : 5000
        });
        // axios 的拦截器
        //拦截请求 允许传递两个参数 第一个是请求发送成功的参数 第二个是请求发送失败的参数
        instance.interceptors.request.use( success=>{
            console.log('请求拦截器'+success);
            return success;
        }, err=>{
            console.log( err )
        });
        //axios.interceptors.response.use(); //拦截相应 第一个是请求发送成功的参数 第二个是请求发送失败的参数
        instance.interceptors.response.use( success=>{
            console.log('响应拦截'+success);
            return success.data;
        }, err=>{
            console.log( err )
        })

        // 本身就是 Promise 对象，就会拥有 resolve 和 reject 回调函数
       return instance( config )
}

